﻿// 278. 数字组合.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

using namespace std;


/*

https://www.acwing.com/problem/content/280/

给定 N 个正整数 A1,A2,…,AN，从中选出若干个数，使它们的和为 M，求有多少种选择方案。

输入格式
第一行包含两个整数 N 和 M。

第二行包含 N 个整数，表示 A1,A2,…,AN。

输出格式
包含一个整数，表示可选方案数。

数据范围
1≤N≤100,
1≤M≤10000,
1≤Ai≤1000,
答案保证在 int 范围内。

输入样例：
4 4
1 1 2 2
输出样例：
3
*/

int n, m;
const int N = 150;
int arr[N];
int dp[N][10010];


int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++) { cin >> arr[i]; }
	dp[0][0] = 1;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= m; j++) {
			dp[i][j] = dp[i - 1][j];
			if (j >= arr[i]) {
				dp[i][j] += dp[i - 1][j - arr[i]];
			}
		}
	}

	cout << dp[n][m] << endl;

	return 0;
}

 